import { createRouter, createWebHistory } from 'vue-router'
import routes from './routes' //导入路由规则
import { useUserStore } from '@/stores/index'
import { showToast } from 'vant'
import NProgress from 'nprogress' //进度条插件
import 'nprogress/nprogress.css'

// 创建路由实例
const router = createRouter({
  // 路由模式history,通过createWebHistory设置history模式，createWebHashHistory()设置hash模式;携带参数是路由的基础路径，默认是'/'。
  // import.meta是javaScript模块暴露的描述信息模块的信息对象；env.BASE_URL是Vite环境变量；通过vite.config.ts中base定义项目基础路径前缀。
  history: createWebHistory(import.meta.env.BASE_URL),
  routes
})

// 路由前置导航，通过函数返回值判断是否放行以及放行到哪里；返回true|undefined放行，false组织，返回路由地址重定向导此。
router.beforeEach((to) => {
  NProgress.start() //切换路由前开启
  const store = useUserStore()
  // 不需要登录的页面，白名单
  const wihteList = ['/login', '/register']
  // 如果没有登录且不在白名单内，去登录;否则不做任何处理
  if (!store.user?.token && !wihteList.includes(to.path)) {
    showToast({ type: 'fail', message: '身份验证失败，请重新登陆' })
    return '/login'
  }
})

// 路由后置导航
router.afterEach((to) => {
  NProgress.done() //切换路由后关闭
  // 在路由切换后修改标题
  document.title = `${to.meta.title || ''}-优医问诊`
})

// 导出路由实例
export default router
